package com.java.UDP.datagram_socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Arrays;

/**
 * UDP协议单播接收数据：相当于服务端，无需建立连接也可接收数据。先运行服务端再运行客户端发生数据，查看服务端控制台数据接收情况
 * 单播指客户端将数据发生给局域网内一台确定的主机，该主机的IP地址确定
 */
public class DatagramSocketReceive {
    public static void main(String[] args) throws IOException {
        // 创建对象：默认随机绑定可用端口，可通过构造函数传递端口号
        DatagramSocket datagramSocket = new DatagramSocket(8888);
        
        DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024);
        
        while (true) {
            // receive：接收发送到本机指定端口的数据。该方法会阻塞，直到接收到数据才继续向下运行
            datagramSocket.receive(datagramPacket);
            
            System.out.println("---------------------------------------------------");
            System.out.println("客户端" + datagramPacket.getPort() + "发送的数据为 ");
            System.out.println(datagramPacket.getAddress());
            System.out.println(datagramPacket.getSocketAddress());
            System.out.println(datagramPacket.getPort());
            System.out.println(datagramPacket.getLength());
            System.out.println(Arrays.toString(Arrays.copyOf(datagramPacket.getData(), datagramPacket.getLength())));
        }
        
        // close：释放资源
        // datagramSocket.close();
    }
}
